
package Acciones.Persistencia;

import Componentes.RendersValidators.RenderValidators;
import Configuraciones.Configuraciones;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.RollbackException;
import javax.swing.AbstractAction;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;


public class AccionGuadar extends AbstractAction{
    private EntityManager em;
    private List ls;
    public static String NOMBRE="Guardar";
    public static String DESCRIPCION="Confirma todos los Cambios Realizados.";
    protected static int KEVENT=KeyEvent.VK_S;
    private RenderValidators validador;
    

    public AccionGuadar() {
            putValue(NAME, NOMBRE);
            putValue(SHORT_DESCRIPTION, DESCRIPCION);
            putValue(MNEMONIC_KEY, new Integer(KEVENT));
            putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KEVENT, 
                    Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
            putValue(SMALL_ICON, Configuraciones.ICONO_GUARDAR);
    }

    public AccionGuadar(EntityManager em, List ls) {
        this();
        this.em = em;
        this.ls = ls;
    }

    
    @Override
    public void actionPerformed(ActionEvent e) {
        if(validador==null || validador.isSave(ls))
        try{
        em.getTransaction().commit();
        em.getTransaction().begin();
        JOptionPane.showMessageDialog(null,"Datos Guardados Correctamente.","Guardar",1);
        }catch(RollbackException rex){
            System.out.println(rex.getMessage());
            em.getTransaction().begin();
            List<Serializable> merged= new ArrayList<Serializable>(ls.size()); 
            for (Object obj : ls)  merged.add(em.merge((Serializable)obj));
            ls.clear();
            ls.addAll(merged);
            JOptionPane.showMessageDialog(null,"Cambios Guardados Correctamente.","Guardar",1);
        }
        
        else
            JOptionPane.showMessageDialog(null,"No se han realizado los "
                    + "cambios.","Error al Guardar",1);

        
    }

    /**
     * @return the em
     */
    public EntityManager getEm() {
        return em;
    }

    /**
     * @param em the em to set
     */
    public void setEm(EntityManager em) {
        this.em = em;
    }

    /**
     * @return the ls
     */
    public List getLs() {
        return ls;
    }

    /**
     * @param ls the ls to set
     */
    public void setLs(List ls) {
        this.ls = ls;
    }

    /**
     * @return the validador
     */
    public RenderValidators getValidador() {
        return validador;
    }

    /**
     * @param validador the validador to set
     */
    public void setValidador(RenderValidators validador) {
        this.validador = validador;
    }
    
}
